home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / socket / sys / socket.h next >
C/C++ Source or Header  |  1994-05-26  |  10KB  |  265 lines

  1. /* Copyright (C) 1991, 1992, 1994 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3.  
  4. The GNU C Library is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of the
  7. License, or (at your option) any later version.
  8.  
  9. The GNU C Library is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with the GNU C Library; see the file COPYING.LIB.  If
  16. not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
  17. Cambridge, MA 02139, USA.  */
  18.  
  19. #ifndef    _SYS_SOCKET_H
  20.  
  21. #define    _SYS_SOCKET_H    1
  22. #include <features.h>
  23.  
  24. __BEGIN_DECLS
  25.  
  26. #define    __need_size_t
  27. #include <stddef.h>
  28.  
  29.  
  30. /* Types of sockets.  */
  31. enum __socket_type
  32. {
  33.   SOCK_STREAM = 1,        /* Sequenced, reliable, connection-based
  34.                    byte streams.  */
  35.   SOCK_DGRAM = 2,        /* Connectionless, unreliable datagrams
  36.                    of fixed maximum length.  */
  37.   SOCK_RAW = 3,            /* Raw protocol interface.  */
  38.   SOCK_RDM = 4,            /* Reliably-delivered messages.  */
  39.   SOCK_SEQPACKET = 5,        /* Sequenced, reliable, connection-based,
  40.                    datagrams of fixed maximum length.  */
  41. };
  42.  
  43. /* Protocol families.  */
  44. #define    PF_UNSPEC    0    /* Unspecified.  */
  45. #define    PF_LOCAL    1    /* Local to host (pipes and file-domain).  */
  46. #define    PF_UNIX        PF_LOCAL /* Old BSD name for PF_LOCAL.  */
  47. #define    PF_FILE        PF_LOCAL /* XXX old GNU name for PF_LOCAL.  */
  48. #define    PF_INET        2    /* IP protocol family.  */
  49. #define    PF_IMPLINK    3    /* ARPAnet IMP protocol.  */
  50. #define    PF_PUP        4    /* PUP protocols.  */
  51. #define    PF_CHAOS    5    /* MIT Chaos protocols.  */
  52. #define    PF_NS        6    /* Xerox NS protocols.  */
  53. #define    PF_ISO        7    /* ISO protocols.  */
  54. #define    PF_OSI        PF_ISO
  55. #define    PF_ECMA        8    /* ECMA protocols.  */
  56. #define    PF_DATAKIT    9    /* AT&T Datakit protocols.  */
  57. #define    PF_CCITT    10    /* CCITT protocols (X.25 et al).  */
  58. #define    PF_SNA        11    /* IBM SNA protocol.  */
  59. #define    PF_DECnet    12    /* DECnet protocols.  */
  60. #define    PF_DLI        13    /* Direct data link interface.  */
  61. #define    PF_LAT        14    /* DEC Local Area Transport protocol.  */
  62. #define    PF_HYLINK    15    /* NSC Hyperchannel protocol.  */
  63. #define    PF_APPLETALK    16    /* Don't use this.  */
  64. #define    PF_ROUTE    17    /* Internal Routing Protocol.  */
  65. #define    PF_LINK        18    /* Link layer interface.  */
  66. #define    PF_MAX        19
  67.  
  68. /* Address families.  */
  69. #define    AF_UNSPEC    PF_UNSPEC
  70. #define    AF_FILE        PF_FILE
  71. #define    AF_UNIX        PF_UNIX
  72. #define    AF_INET        PF_INET
  73. #define    AF_IMPLINK    PF_IMPLINK
  74. #define    AF_PUP        PF_PUP
  75. #define    AF_CHAOS    PF_CHAOS
  76. #define    AF_NS        PF_NS
  77. #define    AF_ISO        PF_ISO
  78. #define    AF_OSI        PF_OSI
  79. #define    AF_ECMA        PF_ECMA
  80. #define    AF_DATAKIT    PF_DATAKIT
  81. #define    AF_CCITT    PF_CCITT
  82. #define    AF_SNA        PF_SNA
  83. #define    AF_DECnet    PF_DECnet
  84. #define    AF_DLI        PF_DLI
  85. #define    AF_LAT        PF_LAT
  86. #define    AF_HYLINK    PF_HYLINK
  87. #define    AF_APPLETALK    PF_APPLETALK
  88. #define    AF_ROUTE    PF_ROUTE
  89. #define    AF_LINK        PF_LINK
  90. #define    AF_MAX        PF_MAX
  91.  
  92.  
  93. /* Structure describing a generic socket address.  */
  94. struct sockaddr
  95.   {
  96.     unsigned short int sa_family; /* Address family.  */
  97.     char sa_data[14];        /* Address data.  */
  98.   };
  99.  
  100.  
  101. /* Create a new socket of type TYPE in domain DOMAIN, using
  102.    protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.
  103.    Returns a file descriptor for the new socket, or -1 for errors.  */
  104. extern int socket __P ((int __domain, enum __socket_type __type,
  105.             int __protocol));
  106.  
  107. /* Create two new sockets, of type TYPE in domain DOMAIN and using
  108.    protocol PROTOCOL, which are connected to each other, and put file
  109.    descriptors for them in FDS[0] and FDS[1].  If PROTOCOL is zero,
  110.    one will be chosen automatically.  Returns 0 on success, -1 for errors.  */
  111. extern int socketpair __P ((int __domain, enum __socket_type __type,
  112.                 int __protocol, int __fds[2]));
  113.  
  114. /* Give the socket FD the local address ADDR (which is LEN bytes long).  */
  115. extern int bind __P ((int __fd, struct sockaddr * __addr, size_t __len));
  116.  
  117. /* Put the local address of FD into *ADDR and its length in *LEN.  */
  118. extern int getsockname __P ((int __fd, struct sockaddr * __addr,
  119.                  size_t * __len));
  120.  
  121. /* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
  122.    For connectionless socket types, just set the default address to send to
  123.    and the only address from which to accept transmissions.
  124.    Return 0 on success, -1 for errors.  */
  125. extern int connect __P ((int __fd, struct sockaddr * __addr, size_t __len));
  126.  
  127. /* Put the address of the peer connected to socket FD into *ADDR
  128.    (which is *LEN bytes long), and its actual length into *LEN.  */
  129. extern int getpeername __P ((int __fd, struct sockaddr * __addr,
  130.                  size_t * __len));
  131.  
  132.  
  133. /* Bits in the FLAGS argument to `send', `recv', et al.  */
  134. enum
  135.   {
  136.     MSG_OOB = 1,        /* Process out-of-band data.  */
  137.     MSG_PEEK = 2,        /* Peek at incoming messages.  */
  138.     MSG_DONTROUTE = 4,        /* Don't use local routing.  */
  139.   };
  140.  
  141. /* Send N bytes of BUF to socket FD.  Returns the number sent or -1.  */
  142. extern int send __P ((int __fd, __ptr_t __buf, size_t __n, int __flags));
  143.  
  144. /* Read N bytes into BUF from socket FD.
  145.    Returns the number read or -1 for errors.  */
  146. extern int recv __P ((int __fd, __ptr_t __buf, size_t __n, int __flags));
  147.  
  148. /* Send N bytes of BUF on socket FD to peer at address ADDR (which is
  149.    ADDR_LEN bytes long).  Returns the number sent, or -1 for errors.  */
  150. extern int sendto __P ((int __fd, __ptr_t __buf, size_t __n, int __flags,
  151.             struct sockaddr * __addr, size_t __addr_len));
  152.  
  153. /* Read N bytes into BUF through socket FD.
  154.    If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
  155.    the sender, and store the actual size of the address in *ADDR_LEN.
  156.    Returns the number of bytes read or -1 for errors.  */
  157. extern int recvfrom __P ((int __fd, __ptr_t __buf, size_t __n, int __flags,
  158.               struct sockaddr * __addr, size_t * __addr_len));
  159.  
  160.  
  161.  
  162. /* Structure describing messages sent by
  163.    `sendmsg' and received by `recvmsg'.  */
  164. struct msghdr
  165.   {
  166.     __ptr_t msg_name;        /* Address to send to/receive from.  */
  167.     size_t msg_namelen;        /* Length of address data.  */
  168.  
  169.     struct iovec *msg_iov;    /* Vector of data to send/receive into.  */
  170.     size_t msg_iovlen;        /* Number of elements in the vector.  */
  171.  
  172.     __ptr_t msg_accrights;    /* Access rights information.  */
  173.     size_t msg_accrightslen;    /* Length of access rights information.  */
  174.   };
  175.  
  176. /* Send a message described MESSAGE on socket FD.
  177.    Returns the number of bytes sent, or -1 for errors.  */
  178. extern int sendmsg __P ((int __fd, __const struct msghdr * __message,
  179.              int __flags));
  180.  
  181. /* Receive a message as described by MESSAGE from socket FD.
  182.    Returns the number of bytes read or -1 for errors.  */
  183. extern int recvmsg __P ((int __fd, struct msghdr * __message, int __flags));
  184.  
  185.  
  186. /* Protocol number used to manipulate socket-level options
  187.    with `getsockopt' and `setsockopt'.  */
  188. #define    SOL_SOCKET    0xffff
  189.  
  190. /* Socket-level options for `getsockopt' and `setsockopt'.  */
  191. enum
  192.   {
  193.     SO_DEBUG = 0x0001,        /* Record debugging information.  */
  194.     SO_ACCEPTCONN = 0x0002,    /* Accept connections on socket.  */
  195.     SO_REUSEADDR = 0x0004,    /* Allow reuse of local addresses.  */
  196.     SO_KEEPALIVE = 0x0008,    /* Keep connections alive and send
  197.                    SIGPIPE when they die.  */
  198.     SO_DONTROUTE = 0x0010,    /* Don't do local routing.  */
  199.     SO_BROADCAST = 0x0020,    /* Allow transmission of
  200.                    broadcast messages.  */
  201.     SO_USELOOPBACK = 0x0040,    /* Use the software loopback to avoid
  202.                    hardware use when possible.  */
  203.     SO_LINGER = 0x0080,        /* Block on close of a reliable
  204.                    socket to transmit pending data.  */
  205.     SO_OOBINLINE = 0x0100,    /* Receive out-of-band data in-band.  */
  206.  
  207.     SO_SNDBUF = 0x1001,        /* Send buffer size.  */
  208.     SO_RCVBUF = 0x1002,        /* Receive buffer.  */
  209.     SO_SNDLOWAT = 0x1003,    /* Send low-water mark.  */
  210.     SO_RCVLOWAT = 0x1004,    /* Receive low-water mark.  */
  211.     SO_SNDTIMEO = 0x1005,    /* Send timeout.  */
  212.     SO_RCVTIMEO = 0x1006,    /* Receive timeout.  */
  213.  
  214.     SO_ERROR = 0x1007,        /* Get and clear error status.  */
  215.     SO_STYLE = 0x1008,        /* Get socket connection style.  */
  216.     SO_TYPE = SO_STYLE,        /* Compatible name for SO_STYLE.  */
  217.   };
  218.  
  219. /* Structure used to manipulate the SO_LINGER option.  */
  220. struct linger
  221.   {
  222.     int l_onoff;        /* Nonzero to linger on close.  */
  223.     int l_linger;        /* Time to linger.  */
  224.   };
  225.  
  226.  
  227. /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
  228.    into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
  229.    actual length.  Returns 0 on success, -1 for errors.  */
  230. extern int getsockopt __P ((int __fd, int __level, int __optname,
  231.                 __ptr_t __optval, size_t * __optlen));
  232.  
  233. /* Set socket FD's option OPTNAME at protocol level LEVEL
  234.    to *OPTVAL (which is OPTLEN bytes long).
  235.    Returns 0 on success, -1 for errors.  */
  236. extern int setsockopt __P ((int __fd, int __level, int __optname,
  237.                 __ptr_t __optval, size_t __optlen));
  238.  
  239.  
  240. /* Prepare to accept connections on socket FD.
  241.    N connection requests will be queued before further requests are refused.
  242.    Returns 0 on success, -1 for errors.  */
  243. extern int listen __P ((int __fd, unsigned int __n));
  244.  
  245. /* Await a connection on socket FD.
  246.    When a connection arrives, open a new socket to communicate with it,
  247.    set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
  248.    peer and *ADDR_LEN to the address's actual length, and return the
  249.    new socket's descriptor, or -1 for errors.  */
  250. extern int accept __P ((int __fd, struct sockaddr * __addr,
  251.             size_t * __addr_len));
  252.  
  253. /* Shut down all or part of the connection open on socket FD.
  254.    HOW determines what to shut down:
  255.      0 = No more receptions;
  256.      1 = No more transmissions;
  257.      2 = No more receptions or transmissions.
  258.    Returns 0 on success, -1 for errors.  */
  259. extern int shutdown __P ((int __fd, int __how));
  260.  
  261.  
  262. __END_DECLS
  263.  
  264. #endif /* sys/socket.h */
  265.